interface Todo {
  id: number;
  text: string;
  done: boolean;
}
type SetTodos = React.Dispatch<React.SetStateAction<Todo[]>>;
export default function myapp(todos: Todo[],
  setTodos: SetTodos) {
  // 添加任务
  const onAdd = (text: string) => {
    const id = todos.length === 0 ? 1 : todos[todos.length - 1].id + 1
    setTodos([
      ...todos,
      {
        id,
        text,
        done: false
      }
    ])
  }
  // 切换状态
  const onToggle = (id: number) => {
    // 使用map的方式来快速生成新的数组
    // map的返回值是经过处理的新数组
    // 使用解构赋值的方式来修改对象的属性，后面的属性会覆盖之前的属性
    const newTodos = todos.map(todo => {
      if (todo.id === id) {
        return {
          ...todo,
          done: !todo.done
        }
      }
      return todo
    })
    setTodos(newTodos)
  }
  // 删除任务
  const onDelete = (id: number) => {
    const newTodos = todos.filter(item => {
      return item.id !== id
    })
    setTodos(newTodos)
  }

  return {
    onAdd,
    onDelete,
    onToggle
  }
}